var  list=[
  { 'id': '29', 'pid': '',     'name': '总裁办' },
  { 'id': '2c', 'pid': '',     'name': '财务部' },
  { 'id': '2d', 'pid': '2c', 'name': '财务核算部'},
  { 'id': '2f', 'pid': '2c', 'name': '薪资管理部'},
  { 'id': 'd2', 'pid': '',     'name': '技术部'},
  { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部'},
  { 'id': '3e', 'pid': 'd3', 'name': 'spring'}
]

//  递归：函数内部调用函数

//  封装函数
function transArray2(arr,pid=''){
  //  循环遍历
  var newArr=[]  //  专门收集转化后的数组
  arr.forEach((item)=>{
    // console.log(item,99);
    //  1-先要找第一层
    if(item.pid===pid){
      //  3-收集非一级
      var child=transArray2(arr,item.id)
      if(child.length){
        //  有长度表示可以收集到二级
        item.children=child
      }
      console.log(child,777);
      //2-收集筛选出来的一级
      newArr.push(item)
    }
  })
  return newArr
}

//  调用函数
console.dir(transArray2(list));